package com.pactera.madp.cp.service;

import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.pactera.madp.cp.api.dto.contact.ContactDetailsTendencyDTO;
import com.pactera.madp.cp.api.entity.workroom.WorkContactEmployeeStatisticsEntity;
import com.pactera.madp.cp.api.vo.contact.ContactStaticsDetailsVO;
import com.pactera.madp.cp.api.vo.contact.ContactStaticsTendencyVO;
import com.pactera.madp.cp.api.vo.contact.ContactStatisticsDataVO;

import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.util.List;
import java.util.Set;

/**
 * WorkContactEmployeeStaticsService
 *
 * @author jun
 * @version 1.0
 * 2021/7/19 17:23
 **/
public interface WorkContactEmployeeStaticsService extends IService<WorkContactEmployeeStatisticsEntity> {

    void synchronizationContact(Integer corpId);

    ContactStaticsDetailsVO getContactDetails();

    List<ContactStaticsTendencyVO> getContactDetailsTendency(ContactDetailsTendencyDTO dto);

    Page<ContactStaticsDetailsVO> getPageList(ContactDetailsTendencyDTO dto, Page page);

    void exitExcel(ContactDetailsTendencyDTO dto, HttpServletResponse response, OutputStream out);

    ContactStatisticsDataVO getStatisticsData(Set<Integer> employeeIds);

    /**
     * 获取客户统计信息
     * @param deptId
     * @param wxDeptId
     * @return 返回客户统计(按照部门统计)信息
     */
    ContactStatisticsDataVO getStatisticsDatas(Integer deptId, Integer wxDeptId);

    /**
     * 获取客户统计信息
     * @param mobile
     * @return 返回客户统计(按照员工统计)信息
     */
    ContactStatisticsDataVO getStatisticsDatas(String mobile);

    /**
     * 客户总数趋势
     * @param dto
     * @return 返回时间范围内的客户总数列表
     */
    List<ContactStaticsTendencyVO> getContactTotalCount(ContactDetailsTendencyDTO dto);

    /**
     * 微信客户数趋势
     * @param dto
     * @return 返回时间范围内的微信客户数列表
     */
    List<ContactStaticsTendencyVO> getWxContactCount(ContactDetailsTendencyDTO dto);

    /**
     * 企业微信客户数趋势
     * @param dto
     * @return 返回时间范围内的企业微信客户数列表
     */
    List<ContactStaticsTendencyVO> getQywxContactCount(ContactDetailsTendencyDTO dto);

    /**
     * CRM客户数趋势(外部联系人通过手机号与CRM系统客户关联成功，则该外部联系人是CRM客户)
     * @param dto
     * @return 返回时间范围内的CRM客户数列表
     */
    List<ContactStaticsTendencyVO> getCrmContactCount(ContactDetailsTendencyDTO dto);

    /**
     * 行外客户数趋势(外部联系人通过手机号与CRM系统客户关联不上，则该外部联系人是行外客户)
     * @param dto
     * @return 返回时间范围内的行外客户数列表
     */
    List<ContactStaticsTendencyVO> getNonBankContactCount(ContactDetailsTendencyDTO dto);

    /**
     * 流失客户数趋势
     * @param dto
     * @return 返回时间范围内的流失客户数趋势列表
     */
    List<ContactStaticsTendencyVO> getLossContactCount(ContactDetailsTendencyDTO dto);

    /**
     * 员工其下的CRM客户总数
     * @param corpId
     * @param tenantId
     * @param dateTime
     * @param employeeIds
     * @return CRM客户总数
     */
    Integer sumCrmContactInEmployeeIds(Integer corpId, Integer tenantId, DateTime dateTime, Set<Integer> employeeIds);

    /**
     * 员工其下的行外客户总数
     * @param corpId
     * @param tenantId
     * @param dateTime
     * @param employeeIds
     * @return 行外客户总数
     */
    Integer sumNonBankContactInEmployeeIds(Integer corpId, Integer tenantId, DateTime dateTime, Set<Integer> employeeIds);

    /**
     * 成员昨日截止客户总数
     * @param employeeId  本系统成员id
     * @return  客户总数
     */
    Long yesterdayContactTotal(Integer employeeId);

}
